package models

import (
	"gorm.io/gorm"
	"smart-health-platforms/config"
	"time"
)

type Devices struct { //设备管理表
	Id                uint           `gorm:"column:id;type:bigint;comment:设备id;primaryKey;not null;" json:"id"`                                        // 设备id
	BrandId           uint           `gorm:"column:brand_id;type:bigint UNSIGNED;comment:品牌id;not null;" json:"brand_id"`                              // 品牌id
	DeviceName        string         `gorm:"column:device_name;type:varchar(255);comment:设备名称;not null;" json:"device_name"`                           // 设备名称
	DeviceModel       string         `gorm:"column:device_model;type:varchar(255);comment:设备型号;not null;" json:"device_model"`                         // 设备型号
	DeviceDescription string         `gorm:"column:device_description;type:varchar(255);comment:设备描述;" json:"device_description"`                      // 设备描述
	PurchaseDate      string         `gorm:"column:purchase_date;type:varchar(255);comment:购买日期;not null;" json:"purchase_date"`                       // 购买日期
	Status            uint           `gorm:"column:status;type:tinyint UNSIGNED;comment:设备状态：1、在用 2、维修 3、报废;not null;" json:"status"`                  // 设备状态：1、在用 2、维修 3、报废
	CreatedAt         time.Time      `gorm:"column:created_at;type:datetime(3);comment:创建时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"` // 创建时间
	UpdatedAt         time.Time      `gorm:"column:updated_at;type:datetime(3);comment:修改时间;not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"` // 修改时间
	DeletedAt         gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);comment:删除时间;default:NULL;" json:"deleted_at"`                          // 删除时间
}

// CreateDevices 设备信息创建
func (d *Devices) CreateDevices() error {
	return config.DB.Create(&d).Error
}

// DevicesDetail 设备信息详情
func (d *Devices) DevicesDetail() error {
	return config.DB.Where("id = ?", d.Id).Find(&d).Error
}

// DevicesUpdate 品牌信息修改
func (d *Devices) DevicesUpdate() error {
	return config.DB.Model(&d).Where("id = ?", d.Id).Updates(&d).Error
}

// DevicesDelete 品牌信息删除
func (d *Devices) DevicesDelete() error {
	return config.DB.Where("id = ?", d.Id).Delete(&d).Error
}

// GetDevicesById 通过ID查找品牌
func (d *Devices) GetDevicesById(id int64) error {
	return config.DB.Where("id = ?", id).Limit(1).Find(&d).Error
}

// GetDevicesList 设备列表查询
func (d *Devices) GetDevicesList(page, pageSize int) (devicesList []*Devices, err error) {
	err = config.DB.Model(&d).Where("device_name like ?", "%"+d.DeviceName+"%").
		Scopes(Paginates(page, pageSize)).Find(&devicesList).Error
	return
}

// 分页
func Paginates(page, pageSize int) func(db *gorm.DB) *gorm.DB {
	return func(db *gorm.DB) *gorm.DB {

		if page <= 0 {
			page = 1
		}

		switch {
		case pageSize > 100:
			pageSize = 100
		case pageSize <= 0:
			pageSize = 10
		}

		offset := (page - 1) * pageSize
		return db.Offset(offset).Limit(pageSize)
	}
}
